package com.yfp.device.controller;

import com.kangaroohy.dingtalk.entity.args.*;
import com.kangaroohy.dingtalk.service.IDingTalkSender;
import com.yfp.common.core.domain.R;
import com.yfp.device.api.AuthService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * token控制器
 *
 * 
 * @since 2023-12-23 17:38:53
 */
@Tag(name = "token接口")
@RestController
@RequestMapping("token")
@RefreshScope
@Slf4j
public class TokenController {

    private final AuthService authService;

    @Autowired
    private IDingTalkSender talkSender;

    @Operation(summary = "/sendDingTalkMsg")
    @PostMapping("sendDingTalkMsg")
    public void sendDingTalkMsg(){

        //text类型
//        talkSender.send(TextArgs.builder().content("自定义封装测试").atMobiles(Lists.newArrayList("133xxxx7608")).build());

        //markdown类型
        talkSender.send(MarkdownArgs.builder().title("markdown测试")
                .text("### andon通知\n - 工位： test\n - 故障： test")
                .build());

//        //link类型
//        talkSender.send(LinkArgs.builder().title("link").text("这是一条link消息")
//                .picUrl("https://help-static-aliyun-doc.aliyuncs.com/assets/img/zh-CN/9977602461/p352641.png")
//                .messageUrl("https://open.dingtalk.com/document/group/robot-overview")
//                .pcSlide(true)
//                .build());
//
//        //整体跳转ActionCard类型
//        talkSender.send(ActionCardWholeArgs.builder()
//                .singleTitle("测试")
//                .text("消息内容")
//                .title("ActionCard")
//                .singleUrl("https://open.dingtalk.com/document/group/robot-overview").build());
//
//        //独立跳转ActionCard类型
//        talkSender.send(ActionCardAloneArgs.builder()
//                .btnOrientation(BtnOrientation.VERTICAL)
//                .btns(Lists.newArrayList(
//                        CardButtonArgs.builder().title("测试1").actionUrl("https://open.dingtalk.com").pcSlide(true).build(),
//                        CardButtonArgs.builder().title("测试2").actionUrl("https://open.dingtalk.com").pcSlide(true).build(),
//                        CardButtonArgs.builder().title("测试2").actionUrl("https://open.dingtalk.com").pcSlide(true).build()
//                ))
//                .title("消息标题").text("消息内容").build());
//
//        //FeedCard类型
//        talkSender.send(FeedCardArgs.builder()
//                .links(Lists.newArrayList(
//                        CardLinksArgs.builder().title("测试1").messageUrl("https://open.dingtalk.com").pcSlide(true)
//                                .picUrl("https://img.alicdn.com/imgextra/i4/O1CN01oWsqXJ1VSf8Bj1DVs_!!6000000002652-2-tps-588-200.png").build(),
//                        CardLinksArgs.builder().title("测试2").messageUrl("https://open.dingtalk.com").pcSlide(true)
//                                .picUrl("https://img.alicdn.com/imgextra/i4/O1CN01oWsqXJ1VSf8Bj1DVs_!!6000000002652-2-tps-588-200.png").build(),
//                        CardLinksArgs.builder().title("测试3").messageUrl("https://open.dingtalk.com").pcSlide(true)
//                                .picUrl("https://img.alicdn.com/imgextra/i4/O1CN01oWsqXJ1VSf8Bj1DVs_!!6000000002652-2-tps-588-200.png").build()
//                ))
//                .build());
    }
    public TokenController(AuthService authService) {
        this.authService = authService;
    }

    /**
     * 设备登录-获取token
     *
     * @param machineSn        机器编号
     * @param base64MachinePwd base64（机器编号 + 机器编号）
     * @return 响应体
     */
    @Operation(summary = "设备登录-获取token-自测通过")
    @PostMapping("login")
    R<Map<String, Object>> machineLogin(@RequestParam String machineSn, @RequestParam String base64MachinePwd) {
        R<Map<String, Object>> r = authService.machineLogin(machineSn, base64MachinePwd);
        return r;
    }

    /**
     * 设备登出-删除token
     *
     * @param token 请求体
     * @return 响应体
     */
    @Operation(summary = "设备登出-删除token-自测通过")
    @PostMapping("logout")
    R<?> logout(@RequestHeader("Authorization") String token) {
        return authService.logout(token);
    }

    /**
     * 设备刷新token
     *
     * @param token 请求体
     * @return 响应体
     */
    @Operation(summary = "设备刷新token-自测通过")
    @PostMapping("refresh")
    R<?> refresh(@RequestHeader("Authorization") String token) {
        return authService.refresh(token);
    }

}
